學習動機:資料有時也需轉換成2進制處理 所以也是要有點進制觀念喔
我們已經知道電腦是用2進位來運算了,網頁資料庫儲存媒體資料也是如此 雖然這次沒有要用DB,但要了解bin檔案的操作仍要學習各種常用轉制。
1bit == 1位元(16進制A~F或數字)   ,   1byte == 8bit(可存文字編碼)
0b數值 == bin() == 2進位制
0o數值 == oct() == 8進位制
0x數值 == hex() == 16進位制
數值 == int() == 10進位制
有個數值 0b110 = int(6)  ,   二補數換算後: -0b111 = int(-7)
以下是2補數在8位元(1byte) 的範圍:
0	1	1	1	1	1	1	1	=	127
0	0	0	0	0	0	1	0	=	2
0	0	0	0	0	0	0	1	=	1
0	0	0	0	0	0	0	0	=	0
1	1	1	1	1	1	1	1	=	−1
1	1	1	1	1	1	1	0	=	−2
1	0	0	0	0	0	0	1	=	−127
1	0	0	0	0	0	0	0	=	−128
Ex:(2補數運算) 2's = ~x
print(~0b10) #2s
print(~0o2)  #8s
print(~0x2) #16s
print(~2) #10s
print(~0xFFF)
print(~0o777)  #先轉2s在轉回來
print(bin(~999))  #10 to 2
print(hex(0b100110)) #2 to 16
print(int(0xABC))    #16 to 10
原來程式原始的運算都是透過2進制來運算,所以其他進制的2補數當然也是轉2進位直接處理
資料移位,是資料做不同介面處理的方法 透過位移資料來完成儲存與讀取
軟體就用在資料的替換加密, 但要小心別溢位(資料損失或錯誤)
而程式的位移就可以改善程式執行高重複迴圈問題。尤其用在單晶片8051 , arduino最明顯,單晶片運算記憶體小 所以用來顯示led迴圈控制可用位移代替
print(bin(0b0110>>2)) #溢位
print(bin(0b0110<<2))  #無溢位有進位 ,成功位移
print(0x3CA<<2)
print(0xAD15F>>10) #是否資料損失?
print(len(bin(0xAD15F))) #可知0不夠位移 位移一定錯誤
真實狀況:圖片處理位移時被邊框吃掉
整理2進運算子:
&	AND
|	OR
^	XOR
~	取2補數
<< 	左移
>> 	右移